图像体素取向
了解图像体素轴的近似世界空间取向有时很有用。
请参阅坐标系统和仿射体素和世界坐标轴的背景。
例如,假设我们有一个身份仿射的图像:
>
>
>
import
numpy
as
np
>
>
>
import
nibabel
as
nib
>
>
>
affine
=
np
。
眼
(
4
)
#身份仿射
>
>
>
voxel_data
=
np
。
随机
。
正常
(
大小
=
(
10
,
11
,
12
))
>
>
>
IMG
=
笔尖
。
Nifti1Image
(
voxel_data
,
仿射
)
由于仿射是身份仿射,所以体素轴与世界轴对齐。按照惯例,nibabel世界轴始终处于RAS +方向(从左到右,在前面后面,低于上层)。
假设我们沿着第一个体素轴取了一个体素线:
>
>
>
single_line_axis_0
=
voxel_data
[:,
0
,
0
]
第一个体素轴对齐到从左到右的世界坐标轴。这意味着第一个体素是在世界的左边,而最后一个体素是在世界的右边。
这里是第二个轴上的一行:
>
>
>
single_line_axis_1
=
voxel_data
[
0
,
:,
0
]
这条线上的第一个体素是朝向世界的后方,最后是朝向前方。
>
>
>
single_line_axis_2
=
voxel_data
[
0
,
0
,
:]
这条线上的第一个体素是朝向世界的下层,而朝向上层的则是最后一个。
因此该图像具有RAS +体素轴。
在其他情况下,轴的方向是不是很明显。例如,这里是我们的例子NIfTI 1文件:
>
>
>
import
os
>
>
>
from
nibabel.testing
import
data_path
>
>
>
example_file
=
os
。
路径
。
join
(
data_path
,
'example4d.nii.gz'
)
>
>
>
img
=
nib
。
加载
(
example_file
)
这里是仿射(精确到两位数):
>
>
>
np
。
set_printoptions
(
precision
=
2
,
suppress
=
True
)
>
>
>
img
。
仿射
阵列([[-2,0,0.117.86],
[-
0.1.97
,-0.36,-35.72],
[0.,
0.22,2.17
,-7.25],
[ ,0.,1.]])
这里体素轴的取向是什么?
尼贝贝尔有个例程告诉你,叫aff2axcodes
。
>
>
>
nib
。
aff2axcodes
(
IMG
。
仿射
)
( 'L', 'A', 'S')
体素取向最接近:
- 第一个体素轴从右到左;
- 第二个体素轴从后面到前面;
- 第三个体素轴从低级到高级。
有时您可能需要重新排列图像体素轴,使其尽可能靠近RAS +方向。我们将这个体素取向称为规范的体素取向,因为RAS +是我们规范的世界取向。重新排列体素轴意味着反转和/或重新排列体素轴。
你可以这样做as_closest_canonical
:
>
>
>
canonical_img
=
nib
。
as_closest_canonical
(
img
)
>
>
>
canonical_img
。
仿射
阵列([[2.,0.,0.,-136.14],
[0. 1.97,-0.36
,-35.72],
[-0。,0.32,2.17
,-7.25],
[0.,0。 ,0.,1.]])
>
>
>
nib
。
aff2axcodes
(
canonical_img
。
仿射
)
('R','A','S')